home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat3 / c++ / sbuf.prot.z / sbuf.prot
Encoding:
Text File  |  2002-10-03  |  22.5 KB  |  358 lines

  1. SBUF.PROT(3C)                                        Last changed: 10-20-98
  2.  
  3.  
  4. NNAAMMEE
  5.      ssttrreeaammbbuuff - Interface for derived classes
  6.  
  7. SSYYNNOOPPSSIISS
  8.      ##iinncclluuddee <<iioossttrreeaamm..hh>>
  9.  
  10.      ttyyppeeddeeff lloonngg ssttrreeaammooffff,, ssttrreeaammppooss;;
  11.      ccllaassss iiooss {{
  12.      ppuubblliicc::
  13.           eennuumm sseeeekk__ddiirr {{ bbeegg,, ccuurr,, eenndd }};;
  14.           eennuumm ooppeenn__mmooddee {{ iinn,, oouutt,, aattee,, aapppp,, ttrruunncc,, nnooccrreeaattee,, nnoorreeppllaaccee }}
  15.      ;;
  16.           //// aanndd lloottss ooff ootthheerr ssttuuffff,, sseeee iiooss((33CC)) ......
  17.      }} ;;
  18.  
  19.      ccllaassss ssttrreeaammbbuuff {{
  20.      ppuubblliicc::
  21.                ssttrreeaammbbuuff(()) ;;
  22.                ssttrreeaammbbuuff((cchhaarr** pp,, iinntt lleenn));;
  23.           vvooiidd ddbbpp(()) ;;
  24.      pprrootteecctteedd::
  25.           iinntt  aallllooccaattee(());;
  26.           cchhaarr**     bbaassee(());;
  27.           iinntt  bblleenn(());;
  28.           cchhaarr**     eebbaacckk(());;
  29.           cchhaarr**     eebbuuff(());;
  30.           cchhaarr**     eeggppttrr(());;
  31.           cchhaarr**     eeppppttrr(());;
  32.           vvooiidd ggbbuummpp((iinntt nn));;
  33.           cchhaarr**     ggppttrr(());;
  34.           cchhaarr**     ppbbaassee(());;
  35.           vvooiidd ppbbuummpp((iinntt nn));;
  36.           cchhaarr**     ppppttrr(());;
  37.           vvooiidd sseettgg((cchhaarr** eebb,, cchhaarr** gg,, cchhaarr** eegg));;
  38.           vvooiidd sseettpp((cchhaarr** pp,, cchhaarr** eepp));;
  39.           vvooiidd sseettbb((cchhaarr** bb,, cchhaarr** eebb,, iinntt aa==00));;
  40.           iinntt  uunnbbuuffffeerreedd(());;
  41.           vvooiidd uunnbbuuffffeerreedd((iinntt));;
  42.  
  43.           vviirrttuuaall iinntt    ddooaallllooccaattee(());;
  44.           vviirrttuuaall   ~~ssttrreeaammbbuuff(()) ;;
  45.      ppuubblliicc::
  46.           vviirrttuuaall iinntt    ppbbaacckkffaaiill((iinntt cc));;
  47.           vviirrttuuaall iinntt    oovveerrffllooww((iinntt cc==EEOOFF));;
  48.           vviirrttuuaall iinntt    uunnddeerrffllooww(());;
  49.           vviirrttuuaall ssttrreeaammbbuuff**
  50.                sseettbbuuff((cchhaarr** pp,, iinntt lleenn));;
  51.           vviirrttuuaall ssttrreeaammppooss
  52.                sseeeekkppooss((ssttrreeaammppooss,, iinntt ==iiooss::::iinn||iiooss::oouutt));;
  53.           vviirrttuuaall ssttrreeaammppooss
  54.                sseeeekkooffff((ssttrreeaammooffff,, sseeeekk__ddiirr,, iinntt ==iiooss::::iinn||iiooss::oouutt));;
  55.           vviirrttuuaall iinntt    ssyynncc(());;
  56.      }};;
  57.  
  58. IIMMPPLLEEMMEENNTTAATTIIOONN
  59.      IRIX systems
  60.  
  61. DDEESSCCRRIIPPTTIIOONN
  62.      A ssttrreeaammbbuuff implements the buffer abstraction described in
  63.      ssbbuuff..ppuubb(3C).  However, the ssttrreeaammbbuuff class itself contains only basic
  64.      members for manipulating the characters and, usually a class derived
  65.      from ssttrreeaammbbuuff will be used.  This man page describes the interface
  66.      needed by programmers who are coding a derived class.  Two kinds of
  67.      member functions are described.  The nonvirtual functions are provided
  68.      for manipulating a ssttrreeaammbbuuff in ways that are appropriate in a derived
  69.      class.  Their descriptions reveal details of the implementation that
  70.      would be inappropriate in the public interface.  The virtual functions
  71.      permit the derived class to specialize the ssttrreeaammbbuuff class in ways
  72.      appropriate to the specific sources and sinks that it is implementing.
  73.      The descriptions of the virtual functions explain the obligations of
  74.      the virtuals of the derived class.  If the virtuals behave as
  75.      specified, the ssttrreeaammbbuuff will perform as specified in the public
  76.      interface.  However, if the virtuals do not perform as specified, then
  77.      the ssttrreeaammbbuuff may not perform properly, and an iioossttrreeaamm (or any other
  78.      code) that relies on proper behavior of the ssttrreeaammbbuuff may not perform
  79.      properly either.
  80.  
  81.      In the following descriptions, the following assumptions are made:
  82.  
  83.      * _s_b is a ssttrreeaammbbuuff**.
  84.  
  85.      * _i and _n are iinntts.
  86.  
  87.      * _p_t_r, _b, _e_b, _p, _e_p, _e_b, _g, and _e_g are cchhaarr**s.
  88.  
  89.      * - _c is an iinntt character (positive or EEOOFF)).
  90.  
  91.      * _p_o_s is a ssttrreeaammppooss. (See ssbbuuff..ppuubb(3C).)
  92.  
  93.      * _o_f_f is a ssttrreeaammooffff.
  94.  
  95.      * _d_i_r is a sseeeekkddiirr.
  96.  
  97.      * _m_o_d_e is an iinntt representing an ooppeenn__mmooddee.
  98.  
  99.    CCoonnssttrruuccttoorrss
  100.      ssttrreeaammbbuuff(())
  101.           Constructs an empty buffer corresponding to an empty sequence.
  102.  
  103.      ssttrreeaammbbuuff((_b,,_l_e_n))
  104.           Constructs an empty buffer and then sets up the reserve area to
  105.           be the _l_e_n bytes starting at _b.
  106.  
  107.    TThhee GGeett,, PPuutt,, aanndd RReesseerrvveerr AArreeaa
  108.      The protected members of ssttrreeaammbbuuff present an interface to derived
  109.      classes organized around three areas (arrays of bytes) managed
  110.      cooperatively by the base and derived classes.  They are the _g_e_t _a_r_e_a,
  111.      the _p_u_t _a_r_e_a, and the _r_e_s_e_r_v_e _a_r_e_a (or buffer).  The get and the put
  112.      areas are normally disjoint, but they may both overlap the reserve
  113.      area, whose primary purpose is to be a resource in which space for the
  114.      put and get areas can be allocated.  The get and the put areas are
  115.      changed as characters are put into and gotten from the buffer, but the
  116.      reserve area normally remains fixed.  The areas are defined by a
  117.      collection of cchhaarr** values.  The buffer abstraction is described in
  118.      terms of pointers that point between characters, but the cchhaarr** values
  119.      must point at cchhaarrs.  To establish a correspondence, the cchhaarr** values
  120.      should be thought of as pointing just before the byte they really
  121.      point at.
  122.  
  123.    FFuunnccttiioonnss ttoo EExxaammiinnee tthhee PPooiinntteerrss
  124.      _p_t_r==_s_b-->>bbaassee(())
  125.           Returns a pointer to the first byte of the reserve area.  The
  126.           reserve area is the space between _s_b-->>bbaassee(()) _a_n_d _s_b-->>eebbuuff(()).
  127.  
  128.      _p_t_r==_s_b-->>eebbaacckk(())
  129.           Returns a pointer to a lower bound on _s_b-->>ggppttrr(()).  _T_h_e _s_p_a_c_e
  130.           _b_e_t_w_e_e_n _s_b-->>eebbaacckk(()) _a_n_d _s_b-->>ggppttrr(()) _i_s _a_v_a_i_l_a_b_l_e _f_o_r _p_u_t_b_a_c_k.
  131.  
  132.      _p_t_r==_s_b-->>eebbuuff(())
  133.           Returns a pointer to the byte after the last byte of the reserve
  134.           area.
  135.  
  136.      _p_t_r==_s_b-->>eeggppttrr(())
  137.           Returns a pointer to the byte after the last byte of the get
  138.           area.
  139.  
  140.      _p_t_r==_s_b-->>eeppppttrr(())
  141.           Returns a pointer to the byte after the last byte of the put
  142.           area.
  143.  
  144.      _p_t_r==_s_b-->>ggppttrr(())
  145.           Returns a pointer to the first byte of the get area.  The
  146.           available characters are those between _s_b-->>ggppttrr(()) _a_n_d
  147.           _s_b-->>eeggppttrr(()).  _T_h_e _n_e_x_t _c_h_a_r_a_c_t_e_r _f_e_t_c_h_e_d _w_i_l_l _b_e **_s_b-->>ggppttrr(())))
  148.           _u_n_l_e_s_s _s_b-->>eeggppttrr(()) _i_s _l_e_s_s _t_h_a_n _o_r _e_q_u_a_l _t_o _s_b-->>ggppttrr(()).
  149.  
  150.      _p_t_r==_s_b-->>ppbbaassee(())
  151.           Returns a pointer to the put area base.  Characters between
  152.           _s_b-->>ppbbaassee(()) _a_n_d _s_b-->>ppppttrr(()) _h_a_v_e _b_e_e_n _s_t_o_r_e_d _i_n_t_o _t_h_e _b_u_f_f_e_r _a_n_d
  153.           _n_o_t _y_e_t _c_o_n_s_u_m_e_d.
  154.  
  155.      _p_t_r==_s_b-->>ppppttrr(())
  156.           Returns a pointer to the first byte of the put area.  The space
  157.           between ssbb-->>ppppttrr(()) aanndd ssbb-->>eeppppttrr(()) iiss tthhee ppuutt aarreeaa..  TThhiiss iiss
  158.           wwhheerree cchhaarraacctteerrss wwiillll bbee ssttoorreedd..
  159.  
  160.    FFuunnccttiioonnss ffoorr SSeettttiinngg tthhee PPooiinntteerrss
  161.      Note that to indicate that a particular area (get, put, or reserve)
  162.      does not exist, all the associated pointers should be set to zero.
  163.  
  164.      _s_b-->>sseettbb((_b,, _e_b,, _i))
  165.           Sets bbaassee(()) and eebbuuff(()) to _b and _e_b respectively.  _i controls
  166.           whether the area will be subject to automatic deletion.  If _i is
  167.           non-zero, then _b will be deleted when bbaassee is changed by another
  168.           call of sseettbb(()), or when the destructor is called for **_s_b..  IIff _b
  169.           aanndd _e_b aarree bbootthh nnuullll tthheenn wwee ssaayy tthhaatt tthheerree iiss nnoo rreesseerrvvee aarreeaa..
  170.           IIff _b iiss nnoonn--nnuullll,, tthheerree iiss aa rreesseerrvvee aarreeaa eevveenn iiff _e_b iiss lleessss tthhaann
  171.           _b aanndd ssoo tthhee rreesseerrvvee aarreeaa hhaass zzeerroo lleennggtthh..
  172.  
  173.      _s_b-->>sseettpp((_p,, _e_p))
  174.           Sets ppppttrr(()) to _p, ppbbaassee(()) to _p, and eeppppttrr(()) to _e_p.
  175.  
  176.      _s_b-->>sseettgg((_e_b,, _g,, _e_g))
  177.           Sets eebbaacckk(()) to _e_b, ggppttrr(()) to _g, and eeggppttrr(()) to _e_g.
  178.  
  179.    OOtthheerr NNoonn--vviirrttuuaall MMeemmbbeerrss
  180.      _i==_s_b-->>aallllooccaattee(())
  181.           Tries to set up a reserve area.  If a reserve area already exists
  182.           or if _s_b-->>uunnbbuuffffeerreedd(()) _i_s _n_o_n_z_e_r_o, aallllooccaattee(()) _r_e_t_u_r_n_s _0 _w_i_t_h_o_u_t
  183.           _d_o_i_n_g _a_n_y_t_h_i_n_g.  _I_f _t_h_e _a_t_t_e_m_p_t _t_o _a_l_l_o_c_a_t_e _s_p_a_c_e _f_a_i_l_s,
  184.           aallllooccaattee(()) _r_e_t_u_r_n_s EEOOFF, _o_t_h_e_r_w_i_s_e (_a_l_l_o_c_a_t_i_o_n _s_u_c_c_e_e_d_s)
  185.           aallllooccaattee(()) _r_e_t_u_r_n_s _1.  aallllooccaattee(()) _i_s _n_o_t _c_a_l_l_e_d _b_y _a_n_y _n_o_n-
  186.           _v_i_r_t_u_a_l _m_e_m_b_e_r _f_u_n_c_t_i_o_n _o_f ssttrreeaammbbuuff.
  187.  
  188.      _i==_s_b-->>bblleenn(())
  189.           Returns the size (in cchhaarrs) of the current reserve area.
  190.  
  191.      ddbbpp(())
  192.           Writes directly on file descriptor 1 information in ASCII about
  193.           the state of the buffer.  It is intended for debugging and
  194.           nothing is specified about the form of the output.  It is
  195.           considered part of the protected interface because the
  196.           information it prints can only be understood in relation to that
  197.           interface, but it is a public function so that it can be called
  198.           anywhere during debugging.
  199.  
  200.      _s_b-->>ggbbuummpp((_n))
  201.           Increments ggppttrr(()) by _n which may be positive or negative.  No
  202.           checks are made on whether the new value of ggppttrr(()) is in bounds.
  203.  
  204.      _s_b-->>ppbbuummpp((_n))
  205.           Increments ppppttrr(()) by _n which may be positive or negative.  No
  206.           checks are made on whether the new value of ppppttrr(()) is in bounds.
  207.  
  208.  
  209.           _s_b-->>uunnbbuuffffeerreedd((ii))
  210.           _i==_s_b-->>uunnbbuuffffeerreedd(())
  211.  
  212.      There is a private variable known as _s_b's buffering state.  _s_b--
  213.      >>uunnbbuuffffeerreedd((_i)) _s_e_t_s _t_h_e _v_a_l_u_e _o_f _t_h_i_s _v_a_r_i_a_b_l_e _t_o _i _a_n_d _s_b--
  214.      >>uunnbbuuffffeerreedd(()) _r_e_t_u_r_n_s _t_h_e _c_u_r_r_e_n_t _v_a_l_u_e.  _T_h_i_s _s_t_a_t_e _i_s _i_n_d_e_p_e_n_d_e_n_t _o_f
  215.      _t_h_e _a_c_t_u_a_l _a_l_l_o_c_a_t_i_o_n _o_f _a _r_e_s_e_r_v_e _a_r_e_a.  _I_t_s _p_r_i_m_a_r_y _p_u_r_p_o_s_e _i_s _t_o
  216.      _c_o_n_t_r_o_l _w_h_e_t_h_e_r _a _r_e_s_e_r_v_e _a_r_e_a _i_s _a_l_l_o_c_a_t_e_d _a_u_t_o_m_a_t_i_c_a_l_l_y _b_y aallllooccaattee.
  217.  
  218.    VViirrttuuaall MMeemmbbeerr FFuunnccttiioonnss
  219.      Virtual functions may be redefined in derived classes to specialize
  220.      the behavior of ssttrreeaammbbuuffs.  This section describes the behavior that
  221.      these virtual functions should have in any derived classes; the next
  222.      section describes the behavior that these functions are defined to
  223.      have in base class ssttrreeaammbbuuff.
  224.  
  225.      _i==_s_b-->>ddooaallllooccaattee(())
  226.           Is called when aallllooccaattee(()) determines that space is needed.
  227.           ddooaallllooccaattee(()) is required to call sseettbb(()) to provide a reserve area
  228.           or to return EEOOFF if it cannot.  It is only called if
  229.           _s_b-->>uunnbbuuffffeerreedd(()) _i_s _z_e_r_o _a_n_d _s_b-->>bbaassee(()) _i_s _z_e_r_o.
  230.  
  231.      _i==oovveerrffllooww((_c))
  232.           Is called to consume characters.  If _c is not EEOOFF, oovveerrffllooww(())
  233.           also must either save _c or consume it.  Usually it is called when
  234.           the put area is full and an attempt is being made to store a new
  235.           character, but it can be called at other times.  The normal
  236.           action is to consume the characters between ppbbaassee(()) and ppppttrr(()),
  237.           call sseettpp(()) to establish a new put area, and if _c!!==EEOOFF _s_t_o_r_e _i_t
  238.           (_u_s_i_n_g ssppuuttcc(())).  _s_b-->>oovveerrffllooww(()) _s_h_o_u_l_d _r_e_t_u_r_n EEOOFF _t_o _i_n_d_i_c_a_t_e _a_n
  239.           _e_r_r_o_r; _o_t_h_e_r_w_i_s_e _i_t _s_h_o_u_l_d _r_e_t_u_r_n _s_o_m_e_t_h_i_n_g _e_l_s_e.
  240.  
  241.      _i==_s_b-->>ppbbaacckkffaaiill((_c))
  242.           Is called when eebbaacckk(()) equals ggppttrr(()) and an attempt has been made
  243.           to putback _c.  If this situation can be dealt with (e.g., by
  244.           repositioning an external file), ppbbaacckkffaaiill(()) should return _c;
  245.           otherwise it should return EEOOFF.
  246.  
  247.      _p_o_s==_s_b-->>sseeeekkooffff((_o_f_f,, _d_i_r,, _m_o_d_e))
  248.           Repositions the get and/or put pointers  (i.e., the abstract get
  249.           and put pointers, not ppppttrr(()) and ggppttrr(())).  The meanings of _o_f_f
  250.           and _d_i_r are discussed in ssbbuuff..ppuubb(3C).  _m_o_d_e specifies whether
  251.           the put pointer (iiooss::::oouutt bit set) or the get pointer (iiooss::::iinn
  252.           bit set) is to be modified.  Both bits may be set in which case
  253.           both pointers should be affected.  A class derived from ssttrreeaammbbuuff
  254.           is not required to support repositioning.  sseeeekkooffff(()) should
  255.           return EEOOFF if the class does not support repositioning.  If the
  256.           class does support repositioning, sseeeekkooffff(()) should return the new
  257.           position or EEOOFF on error.
  258.  
  259.      _p_o_s==_s_b-->>sseeeekkppooss((_p_o_s,, _m_o_d_e))
  260.           Repositions the ssttrreeaammbbuuff get and/or put pointer to _p_o_s.  _m_o_d_e
  261.           specifies which pointers are affected as for sseeeekkooffff(()).  Returns
  262.           _p_o_s (the argument) or EEOOFF if the class does not support
  263.           repositioning or an error occurs.
  264.  
  265.      _s_b==_s_b-->>sseettbbuuff((_p_t_r,, _l_e_n))
  266.           Offers the array at _p_t_r with _l_e_n bytes to be used as a reserve
  267.           area.  The normal interpretation is that if _p_t_r or _l_e_n are zero
  268.           then this is a request to make the _s_b unbuffered.  The derived
  269.           class may use this area or not as it chooses.  It may accept or
  270.           ignore the request for unbuffered state as it chooses.  sseettbbuuff(())
  271.           should return _s_b if it honors the request.  Otherwise it should
  272.           return 0.
  273.  
  274.      ii==_s_b-->>ssyynncc(())
  275.           Is called to give the derived class a chance to look at the state
  276.           of the areas, and synchronize them with any external
  277.           representation.  Normally ssyynncc(()) should consume any characters
  278.           that have been stored into the put area, and if possible give
  279.           back to the source any characters in the get area that have not
  280.           been fetched.  When ssyynncc(()) returns there should not be any
  281.           unconsumed characters, and the get area should be empty.  ssyynncc(())
  282.           should return EEOOFF if some kind of failure occurs.
  283.  
  284.      _i==_s_b-->>uunnddeerrffllooww(())
  285.           Is called to supply characters for fetching, i.e., to create a
  286.           condition in which the get area is not empty.  If it is called
  287.           when there are characters in the get area it should return the
  288.           first character.  If the get area is empty, it should create a
  289.           nonempty get area and return the next character (which it should
  290.           also leave in the get area).  If there are no more characters
  291.           available, uunnddeerrffllooww(()) should return EEOOFF and leave an empty get
  292.           area.
  293.  
  294.      The default definitions of the virtual functions:
  295.  
  296.      _i==_s_b-->>ssttrreeaammbbuuff::::ddooaallllooccaattee(())
  297.           Attempts to allocate a reserve area using ooppeerraattoorr nneeww.
  298.  
  299.      _i==_s_b-->>ssttrreeaammbbuuff::::oovveerrffllooww((_c))
  300.           Is compatible with the old stream package, but that behavior is
  301.           not considered part of the specification of the iostream package.
  302.           Therefore, ssttrreeaammbbuuff::::oovveerrffllooww(()) should be treated as if it had
  303.           undefined behavior.  That is, derived classes should always
  304.           define it.
  305.  
  306.      _i==_s_b-->>ssttrreeaammbbuuff::::ppbbaacckkffaaiill((_c))
  307.           Returns EEOOFF.
  308.  
  309.      _p_o_s==_s_b-->>ssttrreeaammbbuuff::::sseeeekkppooss((_p_o_s,, _m_o_d_e))
  310.           Returns _s_b-->>sseeeekkooffff((ssttrreeaammooffff((_p_o_s)),,iiooss::::bbeegg,,_m_o_d_e)).  _T_h_u_s _t_o
  311.           _d_e_f_i_n_e _s_e_e_k_i_n_g _i_n _a _d_e_r_i_v_e_d _c_l_a_s_s, _i_t _i_s _f_r_e_q_u_e_n_t_l_y _o_n_l_y
  312.           _n_e_c_e_s_s_a_r_y _t_o _d_e_f_i_n_e sseeeekkooffff(()) _a_n_d _u_s_e _t_h_e _i_n_h_e_r_i_t_e_d
  313.           ssttrreeaammbbuuff::::sseeeekkppooss(()).
  314.  
  315.      _p_o_s==_s_b-->>ssttrreeaammbbuuff::::sseeeekkooffff((_o_f_f,, _d_i_r,, _m_o_d_e))
  316.           Returns EEOOFF.
  317.  
  318.      _s_b==_s_b-->>ssttrreeaammbbuuff::::sseettbbuuff((_p_t_r,, _l_e_n))
  319.           Will honor the request when there is no reserve area.
  320.  
  321.      _i==_s_b-->>ssttrreeaammbbuuff::::ssyynncc(())
  322.           Returns 0 if the get area is empty and there are no unconsumed
  323.           characters.  Otherwise it returns EEOOFF.
  324.  
  325.      ii==_s_b-->>ssttrreeaammbbuuff::::uunnddeerrffllooww(())
  326.           Is compatible with the old stream package, but that behavior is
  327.           not considered part of the specification of the iostream package.
  328.           Therefore, ssttrreeaammbbuuff::::uunnddeerrffllooww(()) should be treated as if it had
  329.           undefined behavior.  That is, it should always be defined in
  330.           derived classes.
  331.  
  332. CCAAVVEEAATTSS
  333.      The constructors are public for compatibility with the old stream
  334.      package.  They should be protected.
  335.  
  336.      The interface for unbuffered actions is awkward.  It is difficult to
  337.      write uunnddeerrffllooww(()) and oovveerrffllooww(()) virtuals that behave properly for
  338.      unbuffered ssttrreeaammbbuuff(())s without special casing.  Also there is no way
  339.      for the virtuals to react properly to multi-character gets or puts.
  340.  
  341.      Although the public interface to ssttrreeaammbbuuffs deals in characters and
  342.      bytes, the interface to derived classes deals in cchhaarrs.  Since a
  343.      decision had to be made on the types of the real data pointers, it
  344.      seemed easier to reflect that choice in the types of the protected
  345.      members than to duplicate all the members with both plain and unsigned
  346.      char versions.  But perhaps all these uses of cchhaarr** ought to have been
  347.      with a typedef.
  348.  
  349.      The implementation contains a variant of  sseettbbuuff(()) that accepts a
  350.      third argument.  It is present only for compatibility with the old
  351.      stream package.
  352.  
  353. SSEEEE AALLSSOO
  354.      ssbbuuff..ppuubb(3C), ssttrreeaammbbuuff(3C), iiooss(3C), iissttrreeaamm(3C), oossttrreeaamm(3C)
  355.  
  356.      This man page is available only online.
  357.  
  358.